home *** CD-ROM | disk | FTP | other *** search
/ Aminet 38 / Aminet 38 (2000)(Schatztruhe)[!][Aug 2000].iso / Aminet / misc / math / libalgo.lha / algomath / src / fact.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-30  |  594 b   |  41 lines

  1. /* factorization of a number n*/
  2.  
  3. #include "defs.h"
  4.  
  5. int *am_factorize(int n, int *factors)
  6. {
  7.     int a;
  8.     int i = 0;
  9.     int *_am_fact_array;
  10.  
  11.     if((_am_fact_array=(int*)malloc(32*sizeof(int)))==NULL)
  12.         return 0;
  13.  
  14.     if(n<0)
  15.         n = -n;
  16.  
  17.     if(n <= 1)
  18.         return 0;
  19.  
  20.     while((n&1) == 0)
  21.     {
  22.         _am_fact_array[i++] = 2;
  23.         n >>= 1;
  24.     }
  25.  
  26.     for(a = 1; _am_pp_init[a] <= n; a++)
  27.     {
  28.         while((n%_am_primearray_init[a]) == 0)
  29.         {
  30.             _am_fact_array[i++] = _am_primearray_init[a];
  31.             n /= _am_primearray_init[a];
  32.         }
  33.     }
  34.     if(n > 1)
  35.         _am_fact_array[i++] = n;
  36.     
  37.     _am_fact_array[i] = 0;
  38.     *factors = i;
  39.  
  40. return _am_fact_array;
  41. }